﻿using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MoveTween : MonoBehaviour
{
    // 开始坐标
    public Vector3 fromPosition;

    // 终点坐标
    public Vector3 toPosition;

    // 间隔
    public float duration;

    // 发生动画flag（因为动画是由update控制）
    private bool isTween;

    // 经过时间
    private float elapsedTime;

    // 结束回调匿名函数
    private Action endCallBack;


    //-------------------------------------------------------
    // MonoBehaviour Function
    //-------------------------------------------------------
    // 动画的更新处理
    private void Update ( ) {

        if (!isTween) {
            // 没有发生动画
            return;
        }

        // 动画开始到结束的经过时间
        elapsedTime += Time.deltaTime;

        if (elapsedTime >= duration) {
            // 动画结束的处理
            transform.position = toPosition;
            isTween = false;
            // 这里执行的是视觉交换
            // 视觉交换完毕之后 进行棋盘上的逻辑交换board的x,y
            if (endCallBack != null) {
                endCallBack ( );
            }
            Destroy (this);
            return;
        }

        // 移动进度
        var moveProgress = elapsedTime / duration;
        // Vector3.Lerp（起点，终点，进度百分比）
        // Vector3.Lerp（起点，终点，0） = 起点
        // Vector3.Lerp（起点，终点，1） = 终点
        // Vector3.Lerp（起点，终点，0.5） = 起点和终点之间一半的距离
        transform.position = Vector3.Lerp (fromPosition, toPosition, moveProgress);
    }

    //-------------------------------------------------------
    // Public Function
    //-------------------------------------------------------
    // 动画开始处理 类似构造函数，传参数
    public void DoTween (Vector3 from, Vector3 to, float dur, Action endcb) {
       
        fromPosition = from;

        toPosition = to;
        duration = dur;
        endCallBack = endcb;
        transform.position = from;
        // 重置经过时间
        elapsedTime = 0;
        // 开始动画
        isTween = true;
    }
}
